package Modelo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.OrderBy;



@NamedQueries(
		{	
			@NamedQuery
			(	name = "Fornecedor.recuperaListaDeFornecedores",
				query = "select f from Fornecedor f order by f.id"
			),
			@NamedQuery
			(	name = "Fornecedor.recuperaListaDeFornecedoresEProdutos",
				query = "select distinct f from Fornecedor f left outer join fetch f.produtoFornecedor pf " +
                    "left outer join fetch pf.produto order by f.id"
			),
			@NamedQuery     
			(	name = "Fornecedor.recuperaUmFornecedorEProdutos",
				query = "select distinct f from Fornecedor f left outer join fetch f.produtoFornecedor pf " +
                    "left outer join fetch pf.produto where f.id = ?"
			)         
		})


@Entity
@Table(name="FORNECEDOR")
@SequenceGenerator(name="SEQUENCIA", 
		           sequenceName="SEQ_FORNECEDOR",
		           allocationSize=1)

public class Fornecedor 
{
	private long 	m_idFornecedor;
	private String 	m_nome;
	
	private List<Produto_Fornecedor> produtoFornecedor =  new ArrayList<Produto_Fornecedor>();
	
	public Fornecedor() {};
	public Fornecedor(String nome) {m_nome = nome;}
	
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQUENCIA")
	@Column(name="NUMERO")	
	public long getIDFornecedor() {return m_idFornecedor;}
	
	@Column(name="NOME")
	public String getNome() {return m_nome;}
	
	public void setIDFornecedor(long mIdFornecedor) { m_idFornecedor = mIdFornecedor;}
	public void setNome(String mNome) { m_nome = mNome;}
	
	/* ==> */	
	@OneToMany (mappedBy = "fornecedor")
	public List<Produto_Fornecedor> getProdutoFornecedor()
	{	
		return produtoFornecedor;
	}

	public void setProdutoFornecedor(List<Produto_Fornecedor> produtoFornecedor)
	{	
		this.produtoFornecedor = produtoFornecedor;
	}
	
}
